package 作用域相关;


import 抽象语法树节点.抽象语法树;

// 程序中实体的名称，如变量名、方法名、类名（应该是?）等
public abstract class 符号 {
    public 符号(String 名称) {
        this(名称, null);
    }

    public 符号(String 名称, 类型 类型) {
        this.名称 = 名称;
        this.类型 = 类型;
    }

    public final String 名称;
    public 类型 类型;
    public 作用域 所在作用域;      // 所有符号都知道它们包含在哪个作用域中
    public 抽象语法树 节点;    // 在抽象语法树的位置

    public String 取名称() {
        return 名称;
    }

    public String toString() {
        String s = "";
        if (所在作用域 != null) s = 所在作用域.取作用域名() + ".";
        if (类型 != null) return '<' + s + 取名称() + ":" + 类型 + '>';
        return s + 取名称();
    }
}
